# -*- coding: utf-8 -*-
from __future__ import with_statement
from django.conf import settings
from opengov.govtrack.util import *
from opengov.govtrack.transformers import *
from opengov.govtrack.models import *
import os
from lxml import etree
import urllib
import datetime
import re
import codecs


def index_sou():
	items=os.listdir(settings.GOVTRACK_INDEX_QUEUE)

	for item in items:
		if item.endswith(".html") and item.startswith("sou-"):
			print("Indexerar %s" % item)
			filedata = ""
			f = codecs.open(settings.GOVTRACK_INDEX_QUEUE + "/" + item, "r", "utf-8")
			current_page_no = 0

			for line in f:
				data = normalize(line)
				if re.match("\d+\s?<br>$", data):
					parsed_number = re.match("^(\d+)\s?<br>$", data).groups()[0]	 
					if int(parsed_number) > int(current_page_no):
						current_page_no = parsed_number
						print "Sid", current_page_no

				# Fixa SFS-referenser
				sfsrefs = extract_sfs_references_from_text(data)
				if sfsrefs:
					print sfsrefs

				# Fixa Prop-referenser
				proprefs = extract_prop_references_from_text(data)
				if proprefs:
					print proprefs


			f.close()






def index_utredningar():
	items=os.listdir(settings.GOVTRACK_INDEX_QUEUE)
	
	for item in items:
		if item.endswith(".html") and item.startswith("utredning-"):
			print("Indexerar %s" % item)

			#Ladda dokument
			filedata = ""
			try:
				f = codecs.open(settings.GOVTRACK_INDEX_QUEUE + "/" + item, "r", "utf-8")
				filedata = normalize(f.read())
				f.close()
			except:
				print "Fel vid inlasning av %s" % filepath
				return

			match = re.search("<br>(.*)<br><h3>Rapporter</h3>", filedata)

			if match:
				data = match.groups()[0].split("<br>")
				
				rubrik = nummer = departement = andrad_text = andrad = status_code = komdirrefs = None
				rubrik = lookup_utredning_rubrik_from_text(filedata)

				for dataitem in data:
					dataitem = dataitem.strip()

					if dataitem.startswith(u"<b>Beteckning</b>"):
						nummer = get_value_from_utredning_item(dataitem)

					if dataitem.startswith(u"<b>Senast andrad</b>"):
						andrad_text = get_value_from_utredning_item(dataitem)
						if andrad_text:
							andrad = parse_first_date(andrad_text) 

					if dataitem.startswith(u"<b>Status</b>"):
						status_code = get_value_from_utredning_item(dataitem).strip()[0].upper()
					
					if dataitem.startswith("Direktiv"):
						komdirrefs = extract_komdir_references_from_text(dataitem)

				# Satt egenskaper for utredning
				if nummer:
					utredning = find_or_create_utredning(nummer)
					utredning.rubrik=rubrik
					utredning.updated = andrad
					utredning.status = status_code
					utredning.url = u"http://www.riksdagen.se/webbnav/?nid=3255&doktyp=komm&dok_id=B2_" + nummer.replace(" ","")

					# Redovisningsdatum
					senaste = None

					for ref in komdirrefs:
						try:
							komdir = Kommittedirektiv.objects.get(dir_nr__exact=ref)
							if komdir.redovisas:
								senaste = komdir.redovisas
								
							utredning.direktiv.add(komdir)
						except Kommittedirektiv.DoesNotExist:
							print "Hittade inte komdir %s for %s" % (ref, utredning.nummer)

					utredning.redovisas = senaste
					utredning.save()

					# radera
					os.remove(settings.GOVTRACK_INDEX_QUEUE + "/" + item)
					print("Raderade %s" % item)

			else:
				print "Kunde inte lasa ut datafragment for", item




# Indexera poster i indexeringskon
def index_komdir():
	items=os.listdir(settings.GOVTRACK_INDEX_QUEUE)
	for item in items:
		if item.endswith(".html") and item.startswith("komdir-"):
			print("Indexerar %s" % item)

			# Skapa DOM-trad
			parser = etree.HTMLParser()
			item_dom = etree.parse(settings.GOVTRACK_INDEX_QUEUE + "/" + item, parser)

			# metadata
			meta = item_dom.xpath("//b")

			filedata = ""

			# Las in radata
			try:
				f = codecs.open(settings.GOVTRACK_INDEX_QUEUE + "/" + item, "r", "iso-8859-1")
				filedata = normalize(f.read())
				f.close()
			except:
				print "Fel vid inlasning av %s" % filepath


			if len(meta) >= 5:
				nummer = meta[0].text.split("Dir.")[-1].strip()

				#kolla om direktiv redan finns
				kd = None

				try:
					kd = Kommittedirektiv.objects.get(dir_nr__exact=nummer)
				except Kommittedirektiv.DoesNotExist:
					kd = Kommittedirektiv()
				
				kd.dir_nr = nummer
				
				redovisningsdatum = extract_delivery_date_from_text(filedata)
				print "redovisas:"
				print redovisningsdatum
				if redovisningsdatum:
					kd.redovisas = redovisningsdatum

				rubrik = " ".join(meta[3].text.split()).strip()
				kd.rubrik = rubrik
				kd.departement = find_or_create_departement(meta[1].text.strip())
				kd.regeringssammantrade = datetime.datetime.strptime(meta[2].text.strip(), "%Y-%m-%d").date()
				kd.url = "http://62.95.69.15/cgi-bin/thw?%24{HTML}=dir_lst&%24{OOHTML}=dir_dok&%24{SNHTML}=dir_err&%24{MAXPAGE}=26&%24{TRIPSHOW}=format%3DTHW&%24{BASE}=DIR&%24{FREETEXT}=&RUB=&BET=" + urllib.quote_plus(kd.dir_nr) + "&ORG=&UDAT="

				# Tillaggsdirektiv?
				if rubrik.startswith(u"Tillaggsdirektiv"):

					# Las ut utredningsnummer
					if extract_utredning_reference_from_text(rubrik):
						utredningsnummer = extract_utredning_reference_from_text(rubrik)
						# koppla till utredning
						try:
							utredning = find_or_create_utredning(utredningsnummer)
							if utredning:
								kd.tillagg_till_utredning = utredning
						except Utredning.DoesNotExist:
							print(u"Kunde inte koppla utredning %s %s" % utredningsnummer)
					
				kd.save()
				print("Sparade komdir " + kd.dir_nr)

				# SFS-referenser
				for sfsnummer in extract_sfs_references_from_text(filedata):
					sfsreferens = find_or_create_sfsreference(sfsnummer)
					if sfsreferens:
						kd.sfser.add(sfsreferens)

				# Celexreferenser
				direktivreferenser = extract_directive_references_from_text(filedata)
				
				if len(direktivreferenser) > 0:
					for celexid in [egref_to_celex(ref) for ref in direktivreferenser]:
						celexreferens = find_or_create_celexreference(celexid)
						if celexreferens:
							kd.eu_ratt.add(celexreferens)
							print("Lade till celexreferens %s" % celexreferens.celexnummer)

				# prop referenser...
				for propnummer in extract_prop_references_from_text(filedata):
					prop = find_or_create_proposition(propnummer)
					if prop:
						kd.propositioner.add(prop)
						print("Lade till propreferens %s" % prop.nummer)

				
			if transform_komdir(settings.GOVTRACK_INDEX_QUEUE + "/" + item):
				print("Sparade %s" % item)

				# radera
				os.remove(settings.GOVTRACK_INDEX_QUEUE + "/" + item)
				print("Raderade %s" % item)

			else:
				pass
				#logger.error("Felaktigt antal metadataelement i %s" % item)
